// Step 1: 加载上传到 GEE 的点数据
var points = RiceFJ;

// Step 2: 定义 NDPI 计算函数
function calculateNDPI(image) {
  var ndpi = image.expression(
    '(NIR - (0.74 * RED + 0.26 * SWIR)) / (NIR + (0.74 * RED + 0.26 * SWIR))', {
      'NIR': image.select('B8'),    // 近红外波段
      'RED': image.select('B4'),    // 红波段
      'SWIR': image.select('B11')   // 短波红外波段
    }).rename('NDPI');
  return image.addBands(ndpi); // 添加 NDPI 波段
}

// Step 3: 获取 Sentinel-2 数据，并进行云掩膜和 NDPI 计算
var s2Collection = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
                      .filterBounds(points) // 限制在点的范围内
                      .filterDate('2022-01-01', '2022-12-31') // 限制时间范围
                      .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)) // 去除云量较大的影像
                      .map(calculateNDPI);

// Step 4: 定义时间范围，按每月进行分组
var months = ee.List.sequence(1, 12);
var year = 2022; // 定义年份

var monthlyNDPI = months.map(function(m) {
  // 按月过滤影像
  var start = ee.Date.fromYMD(year, m, 1);
  var end = start.advance(1, 'month');
  var monthlyComposite = s2Collection.filterDate(start, end).median(); // 取每月的中位数影像
  var ndpi = monthlyComposite.select('NDPI'); // 获取 NDPI 波段
  
  // 对点数据进行 NPVI 采样
  var sampled = ndpi.sampleRegions({
    collection: points,
    scale: 10, // Sentinel-2 数据的分辨率
    geometries: true // 保留几何信息
  }).map(function(f) {
    return f.set('month', m); // 添加月份字段
  });
  
  // 将NDPI值提取为一个列表
  var ndpiValues = sampled.aggregate_array('NDPI');
  
  // 去掉4个最高值和4个最低值
  var sortedNdpiValues = ndpiValues.sort();
  var filteredNdpiValues = sortedNdpiValues.slice(4, -4);
  
  // 计算平均NDPI值
  var meanNdpi = ee.Number(filteredNdpiValues.reduce(ee.Reducer.mean()));
  
  // 将平均NDPI值添加到FeatureCollection中
  var meanFeature = ee.Feature(null, {'month': m, 'meanNDPI': meanNdpi});
  
  return meanFeature;
});

// 将结果拼接成一个 FeatureCollection
monthlyNDPI = ee.FeatureCollection(monthlyNDPI);
print(monthlyNDPI);

// 可视化点数据
Map.centerObject(points, 10);
Map.addLayer(points, {color: 'red'}, 'Points');

// Step 5: 导出为 CSV
Export.table.toDrive({
  collection: monthlyNDPI,
  description: 'Rice_22MonthlyNDPI_Mean',
  fileFormat: 'CSV',
  folder: 'GEE_Exports'
});